// 对axios对象进行封装
import axios from "axios"
// import { Promise } from "core-js/library/web/timers"

// 引入store仓库，调用登录提示框的函数
import store from "@/store"
// console.log(store._actions["ShowToast/asyncchanToShowtoast"][0]);
// 创建axios实例
const instance = axios.create({
    baseURL: "http://kumanxuan1.f3322.net:8881/cms",
    timeout: 5000
})

// 封装请求拦截器
instance.interceptors.request.use(config => {
    // 什么时候执行这个函数？？  在请求发出去之前执行
    // config是什么？？  是一个对象，保存了关于本次请求的信息
    // 这个函数用来做什么？？  可以用来做一些请求前的准备（比如：添加请求头）
    // console.log("请求拦截器中的代码",config);

    // 判断本地有没有token，如果有就在请求头中带上token
    const token = localStorage.getItem("x-auth-token");
    if (token) {
        config.headers["x-auth-token"] = token;
    }
    return config
}, err => {
    return Promise.reject(err)
})

// 封装响应拦截器
instance.interceptors.response.use(res => {
    // 响应失败，执行这里的代码
    let res_data = res.data;
    if (res_data.code != 0 && res_data.code != 400 && res_data.code != 407) {
        store._actions["ShowToast/asyncchanToShowtoast"][0]({
            msg: res_data.message,
            type: "danger"
        })
        return false   //  return的值会返回给请求函数
    }
    return res_data    //  这里的数据返回到组件内部请求的回调函数中的res
}, err => {
    // 请求失败 直接抛出异常
    store._actions["ShowToast/asyncchanToShowtoast"][0]({
        msg: err,
        type: "danger"
    })
    return Promise.reject(err)
})

// 导出实例
export default instance


// 代码执行顺序：
// 1  先执行请求拦截器的代码
// 2  再执行响应拦截器的代码
// 3  最后执行组件内部请求的回调函数中的代码
